package com.suhui.task.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.suhui.task.common.Result;
import com.suhui.task.pojo.progress.M;
import com.suhui.task.pojo.progress.P_M;
import com.suhui.task.service.Get_header;
import com.suhui.task.service.HttpRequest;
import com.suhui.task.service.My_util;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@RestController
@RequestMapping("/table")
public class TableController {

    private String URL = "http://172.16.249.145:5000/shproject_task";
//    private final String URL = "http://192.168.136.131:3000";


    @Resource
    private HttpRequest httpRequest;

    @Resource
    private Get_header get_header;

    @Resource
    private My_util my_util;



    /**
     * 成员管理页面
     * 分页查询
     * 获取成员数据
     */
    @GetMapping("/get_table")
    public Result<?> member_data(String url,String select,int limit,int offset,String order) {
        if ("".equals(url)){
            return Result.error("500","请求格式错误");
        }
        if (0 >= limit) {
            // 一页默认数据为 10 条
            limit = 10;
        }
        if ("".equals(order)) {
            // 默认按id 分页
            order = "id";
        }
        // 分页逻辑
        if (offset == 1) {
            offset = offset - 1;
        }else {
            offset = (offset-1)*limit;
        }
        // 请求参数
        Map<String,Object> param = new HashMap<>();
        param.put("select",select);
        param.put("limit",limit);
        param.put("offset",offset);
        param.put("order",order);
        url = this.URL + url;
        // 拿到有token的请求头
        Map<String,String> header = get_header.set_header();
        // 获取字符串数据
        String data_s = httpRequest.sendGet(url,param,header);
        // 分割字符串
        String[] split = data_s.split("\"member_progress\":\\[\\{|}]|\"member\":\\[\\{");
        // 拼接 最总想要的结果
        String data_string = "";
        for (int i=0;i<split.length;i++) {
            data_string += split[i];
        }
        if ("[]".equals(data_string)) {
            return Result.success();
        }
        data_string = data_string+"}]";
        // 将获取的数据 字符串 转换为 json格式的集合
        JSONArray data_array = JSON.parseArray(data_string);
        return Result.success(data_array);
//        return Result.success(data_s);
    }

    /**
     * 表格展示页面
     * 普通表格查询
     * 获取数据量
     */
    @GetMapping("/get_table_num")
    public Result<?> member_data_total(String url) {
        if ("".equals(url)){
            return Result.error("500","请求格式错误");
        }
        url = this.URL + url;
        // 拿到有token的请求头
        Map<String,String> header = get_header.set_header();
        String data_s = httpRequest.sendGet(url,null,header);
        JSONArray data_array = JSON.parseArray(data_s);
        int total = data_array.size();
        return Result.success(total);
    }

    /**
     * 表格展示页面
     * 模糊查询
     * 按指定内容(name、group)搜索数据
     */
    @GetMapping("/search")
    private Result<?> table_search_name_group(String url,String name,String group,String select) {
        if ("".equals(url)){
            return Result.error("500","请求格式错误");
        }
        if (name==null && group==null) {
            return Result.error("500","未指定姓名或组别");
        }
        // 请求地址
        url = this.URL + url;
        // 添加参数
        Map<String,Object> param = new HashMap<>();
        param.put("select",select);
        // 拿到有token的请求头
        Map<String,String> header = get_header.set_header();
        if (name!=null && group==null) {
            String like_name = "like.*" + name + "*";
            param.put("name",like_name);
        }
        if (name==null && group!=null) {
            String like_group = "like.*" + group + "*";
            param.put("group",like_group);
        }
        if (name!=null && group!=null) {
            String like_group = "like.*" + group + "*";
            String like_name = "like.*" + name + "*";
            param.put("group",like_group);
            param.put("name",like_name);
        }
        String data_string = httpRequest.sendGet(url,param,header);
        // 将获取的数据 字符串 转换为 json格式的集合
        JSONArray data_array = JSON.parseArray(data_string);
        // 转换格式 返回数据
        JSONArray data = my_util.ChangeData_n_g(data_array);
        return Result.success(data);
    }

    /**
     * 表格展示页面
     * 模糊查询
     * 按指定内容(time)搜索数据
     */
    @GetMapping("/search_time")
    private Result<?> table_search_time(String url,String time,String select) {
        if ("".equals(url)){
            return Result.error("500","请求格式错误");
        }
        // 时间校验
        Pattern pattern = Pattern.compile("^(\\d{4})年-([1-3][0-9]|0?\\d)周$");
        Matcher matcher = pattern.matcher(time);
        if (!matcher.matches()) {
            return Result.error("500","搜索时间的格式为: xxxx年-x周");
        }
        // 请求地址
        url = this.URL + url;
        // 添加参数
        Map<String,Object> param = new HashMap<>();
        param.put("select",select);
        // 拿到有token的请求头
        Map<String,String> header = get_header.set_header();
        if (time==null) {
            return Result.error("500","未输入搜索日期");
        }
        if (time!=null) {
            String like_time = "like.*" + time + "*";
            param.put("year_week",like_time);
        }
        String data_string = httpRequest.sendGet(url,param,header);
        // 将获取的数据 字符串 转换为 json格式的集合
        JSONArray data_array = JSON.parseArray(data_string);
        // 转换格式 返回数据
        JSONArray data = my_util.ChangeData_time(data_array);
        return Result.success(data);
    }

    /**
     * 表格展示页面
     * 普通查询
     * 通过成员姓名查询成员id返回
     * @param name
     * @return
     */
    @GetMapping("/getId_by_name")
    public Result<?> getID_ByName(String name) {
        if (name == null) {
            return Result.error("500","成员姓名错误");
        }
        // token
        Map<String,String> header = get_header.set_header();
        String url = this.URL + "/member";
        HashMap<String, Object> map = new HashMap<>();
        map.put("select","id");
        map.put("name","eq."+name);
        String data_string = httpRequest.sendGet(url, map, header);
        JSONArray objects = JSONArray.parseArray(data_string);
        M m = new M();
        String id = null;
        for (Object i : objects) {
            m = JSONObject.parseObject(i.toString(), M.class);
            id = m.getId();
        }
        return Result.success(id);
    }

    /**
     * 表格展示页面
     * 删除数据
     * 依据id删除进度详细信息
     */

}
